所以,operator[]
不直接说s[s.size()]
必须是s[s.size()-1]
内存之后的人物.似乎措辞是为了避免提出这种说法.
但是s.data()
说s.data()+k == &s[k]
,并且s.data()
必须返回一个指针.
忽略&
在CharT
上面使用而不是上面使用的看似标准缺陷,std::addressof
实现CharT
是否s[s.size()]
可以在第一次调用之前自由地返回不同的(例如,在受保护的页面上,或在ROM中)s.data()
?(显然,它可以将缓冲区安排在一个只读的页面上结束;我说的是另一种情况)
要明确:
据我所知,如果s.data()
永远不会被调用(并且编译器可以证明它),那么s[s.size()]
就不需要与缓冲区的其余部分连续.
可以在调用之后进行std::addressof(s[s.size()])
更改,s.data()
并且实现符合标准(只要之前s.data()+k == &s[k]
已经过.data()
评估[]
,但编译器可以自由执行).或者是否有我看不到的不变性要求?